package com.yc.bbs.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yc.bbs.entity.Link;
import com.yc.bbs.service.impl.LinkServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 友情链接表 前端控制器
 * </p>
 *
 * @author k
 * @since 2024-12-06
 */
@RestController
@RequestMapping("/Link")
public class LinkController {

    @Autowired
    private LinkServiceImpl linkService;

    /**
     * 查询链接列表
     * 支持按名称和状态筛选
     * 默认查询所有数据
     */
    @GetMapping("/list")
    public List<Link> listLinks(@RequestParam(required = false) String name,  //接收查询参数 name 和 state，默认为可选参数
                                @RequestParam(required = false) String state) {

        LambdaQueryWrapper<Link> wrapper = new LambdaQueryWrapper<>();

        // 如果有名称条件，添加名称模糊查询
        if (name != null && !name.trim().isEmpty()) {
            wrapper.like(Link::getName, name);
        }

        // 如果有状态条件，添加状态精确查询
        if (state != null && !state.trim().isEmpty()) {
            wrapper.eq(Link::getState, Integer.parseInt(state));
        }

        // 按添加时间降序排序，保证最新添加的数据显示在前面
        wrapper.orderByDesc(Link::getStartTime);

        return linkService.list(wrapper);
    }

    /**
     * 添加链接
     */
    @PostMapping("/add")
    public boolean addLink(@RequestBody Link link) {
        // 设置添加时间和初始状态
        link.setStartTime(LocalDateTime.now());
        link.setState(0); // 默认状态为正常
        return linkService.save(link);
    }

    /**
     * 更新链接
     */
    @PutMapping("/update")
    public boolean updateLink(@RequestBody Link link) {
        // 获取原有记录
        Link oldLink = linkService.getById(link.getLid());
        if (oldLink != null) {
            // 保持原有的添加时间不变
            link.setStartTime(oldLink.getStartTime());
        }
        return linkService.updateById(link);
    }

    /**
     * 删除链接（软删除）
     */
    @DeleteMapping("/delete/{id}")
    public boolean deleteLink(@PathVariable Integer id) {
        Link link = new Link();
        link.setLid(id);
        link.setState(1); // 设置状态为删除
        return linkService.updateById(link);
    }

    @GetMapping("/getLinks")
    public List<Link> getLinks() {
        return linkService.getLinks();
    }


}
